package com.example.myapplication2048.itemprovider;

import com.example.myapplication2048.ResourceTable;
import com.example.myapplication2048.datamodel.DynamicItemInfo;
import ohos.agp.components.*;
import ohos.app.AbilityContext;
import ohos.app.Context;

import java.util.List;

public class DynamicProvider extends RecycleItemProvider {
    /**
     * 卡片盒子模型
     */
    private List<DynamicItemInfo> dynamicModels;
    /**
     * 应用程序可以使用AbilityContext来获取资源、启动能力、
     * 创建或获取线程模型，以及获取应用程序包信息和运行信息。
     * 一个能力就是ability context的一个实例。
     * 总之只要操作就需要getcontext 因为他需要这个环境 就好比人对水的需求 盖房子 做饭 都需要水一样
     */

    public DynamicProvider(List<DynamicItemInfo> dynamicModels) {
        this.dynamicModels = dynamicModels;
    }

    /**
     * ：
     * @return获取提供程序中数据项的总数
     */
    @Override
    public int getCount() {
        return  dynamicModels.size();
    }
    /**
     * ：
     * @return获取位于数据集中指定位置的数据项。
     */
    @Override
    public DynamicItemInfo getItem(int i) {
        return dynamicModels.get(i);
    }
    /**
     * ：
     * @return 获取数据集中指定位置的数据项的行ID。
     */
    @Override
    public long getItemId(int i) {
        return i;
    }

    /**
     * 获取在数据集中指定位置显示数据的组件。
     * @param i  指示组件在数据集中的位置。
     * @param component  表示前一个需要重用的组件。如果没有这样的组件，这个参数可以为空。
     * @param componentContainer  匹配要获取组件的父组件。
     * @return
     */
    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
      Component parse = component; //默认 component ==null 第一次的时候

        /**
         * LayoutScatter
         * 您可以使用该工具在XML文件中定义一个组件，
         * 然后调用parse(int, ohos.agp.components.ComponentContainer, boolean)
         * 方法来使用该文件生成一个组件对象。
         * parse 公共组件解析(int xmlId, ComponentContainer根，boolean attachToRoot)
         * 将XML文件转换为组件。
         *
         */
        /**
         * parse
         *   参数1 组件id
         *   参数2 跟组件 就是当前容器 父组件。
         */
        Dynamicitem dynamicitem;//初始化
        if (parse==null){
            //获取上下文 这里获取的是父组件 就是 ListContainer 上下文
            Context context = componentContainer.getContext();
            //获取xml 布局模板
            parse  = LayoutScatter.getInstance(context)
                    .parse(ResourceTable.Layout_dynamicitem, componentContainer, false);
            //指明给哪个模板容器添加数据
            dynamicitem = new Dynamicitem(parse);
            parse.setTag(dynamicitem);//将布局模板写入缓存  下次调用使用 不用重复查询模板
        }else {
            //第二次进来有缓存
            dynamicitem =(Dynamicitem) parse.getTag();
        }
        //给布局模板里面的组件添加数据
        dynamicitem.textAUTH.setText(dynamicModels.get(i).getAuthor());
        //绑定完成 返回当前模板
        return parse;
    }
    /**
     * 动态卡片容器
     */
    public  static   class Dynamicitem {
        Text textAUTH;//初始化组件
        Dynamicitem(Component itemComponent){
            //获取模板里面的 组件
            textAUTH = (Text) itemComponent.findComponentById(ResourceTable.Id_authname);
        }


    }
}
